<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
</body>
</html>
<script src="./lodash.js"></script>
<script>
// 面试问题：请说一说有哪些方法可以实现数组去重？

// 第一类：数组中元素全为 基础数据类型：
  const arr = [1, 2, 3, 4, 1, 2, 3, 4, 'a', 'a'];

  // 1. Set()
    // const s = new Set(arr);
    // console.log([...s]);

  // 2. 逻辑去重：
    // const result = [];
    // arr.forEach(item => {
    //   if (!result.includes(item)) {
    //     result.push(item);
    //   }
    // });

  // 3. * 哈希去重 - hash (又可叫 “唯一标识符”)
      // 这是一种思想：对象的 key 必须是 唯一值
    // const result = {};
    // arr.forEach(item => {
    //   result[item] = null;
    // });
    // console.log(Object.keys(result));

  // 4. ！！ lodash 去重；
  // console.log(_.uniq(arr));
  
// ----------------------------- 去重 复杂数据类型 ------------------------------------------

// 需求：我要知道，团队中 人的岁数 分别是多少
  // -> [
  //   { name: '张三', age: 30 },
  //   { name: '张4', age: 31 },
  //   { name: '张5', age: 32 },
  // ].map(d => d.age)

const students = [
  { name: '张三', age: 30 },
  { name: '张4', age: 31 },
  { name: '张5', age: 32 },
  { name: '张6', age: 30 }
];

/* 1 - 哈希去重
  const result = {};
  students.forEach(d => {
    result[d.age] = d;
  });

  // 1. console.log(Object.keys(result)); // ['30', '31', '32']
  
  // 2. console.log(Object.values(result).map(d => d.age));
*/

/* 2. lodash   -   _.uniqBy
  console.log(_.uniqBy(students, 'age'));
*/






</script>